#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
DEV_VISION 标准导入模板 - 永久保留文件

⚠️ 重要说明：
1. 本文件为系统测试和开发的标准导入模板，永久保留，禁止删除
2. 所有临时测试脚本、检查脚本、修复脚本都应使用此模板
3. 提供统一的Flask应用上下文和数据库模型导入
4. 确保测试环境的一致性和代码复用

使用方法：
```python
from standard_imports_template import *

def main():
    with get_app_context():
        # 在此处编写数据库操作代码
        users = User.query.all()
        print(f"用户总数: {len(users)}")

if __name__ == "__main__":
    main()
```

版本: v1.0
创建时间: 2025-08-30
维护说明: 长期维护，禁止删除，模型更新时同步更新
"""

import os
import sys
from contextlib import contextmanager

# 添加项目根目录到Python路径
sys.path.insert(0, os.path.abspath('.'))

# ===== 核心Flask应用和数据库 =====
from backend import create_app
from backend.infrastructure.database import db

# ===== 用户和权限相关模型 =====
from backend.models.user import User
from backend.models.role import Role
from backend.models.permission import Permission
from backend.models.user_role import UserRole
from backend.models.role_permission import RolePermission
from backend.models.role_application import RoleApplication

# ===== 学生相关模型 =====
from backend.models.student import Student
from backend.models.student_extension import StudentExtension

# ===== 视力相关模型 =====
from backend.models.vision import VisionRecord
from backend.models.vision_log import VisionRecordLog, LogAction

# ===== 干预相关模型 =====
from backend.models.intervention import InterventionRecord
from backend.models.intervention_log import InterventionRecordLog

# ===== 随访相关模型 =====
from backend.models.followup import FollowupRecord
from backend.models.followup_log import FollowupRecordLog

# ===== 系统管理模型 =====
from backend.models.system_log import SystemLog
from backend.models.notification import Notification
from backend.models.document import Document
from backend.models.feedback import Feedback

# ===== 医疗咨询和社交模型 =====
from backend.models.medical_consult import MedicalConsult
from backend.models.social_share import SocialShare

# ===== 学生档案日志模型 =====
from backend.models.student_archive_log import StudentArchiveLog, StudentLogAction

# ===== 配置管理 =====
from backend.config.config_manager import ConfigManager
from backend.config.constants_v2 import *

# ===== 常用工具函数 =====
from datetime import datetime, date, timedelta
import json
import requests

# ===== 全局Flask应用实例 =====
app = create_app()

@contextmanager
def get_app_context():
    """
    获取Flask应用上下文管理器
    
    使用方法:
    with get_app_context():
        # 数据库操作
        users = User.query.all()
    """
    with app.app_context():
        yield

def get_db_stats():
    """
    获取数据库基础统计信息
    
    Returns:
        dict: 包含各表记录数的字典
    """
    with get_app_context():
        stats = {
            'users': User.query.count(),
            'students': Student.query.count(),
            'vision_records': VisionRecord.query.count(),
            'intervention_records': InterventionRecord.query.count(),
            'followup_records': FollowupRecord.query.count(),
            'roles': Role.query.count(),
            'permissions': Permission.query.count(),
            'notifications': Notification.query.count(),
            'social_shares': SocialShare.query.count(),
        }
    return stats

def print_db_stats():
    """打印数据库统计信息"""
    stats = get_db_stats()
    print("="*50)
    print("📊 数据库统计信息")
    print("="*50)
    for table, count in stats.items():
        print(f"{table:20}: {count:>6}")
    print("="*50)

def test_db_connection():
    """
    测试数据库连接
    
    Returns:
        bool: 连接是否成功
    """
    try:
        with get_app_context():
            from sqlalchemy import text
            db.session.execute(text('SELECT 1'))
            return True
    except Exception as e:
        print(f"数据库连接失败: {e}")
        return False

def get_config_manager():
    """
    获取配置管理器实例
    
    Returns:
        ConfigManager: 配置管理器实例
    """
    return ConfigManager()

def test_api_endpoint(endpoint, base_url="http://localhost:5000", timeout=5):
    """
    测试API端点
    
    Args:
        endpoint (str): API端点路径
        base_url (str): 基础URL
        timeout (int): 超时时间
        
    Returns:
        dict: 包含状态码和响应的字典
    """
    try:
        response = requests.get(f"{base_url}{endpoint}", timeout=timeout)
        return {
            'success': True,
            'status_code': response.status_code,
            'url': f"{base_url}{endpoint}",
            'response_size': len(response.content)
        }
    except requests.exceptions.RequestException as e:
        return {
            'success': False,
            'error': str(e),
            'url': f"{base_url}{endpoint}"
        }

# ===== 常用查询函数 =====
def get_user_by_username(username):
    """根据用户名获取用户"""
    with get_app_context():
        return User.query.filter_by(username=username).first()

def get_student_by_education_id(education_id):
    """根据教育ID获取学生"""
    with get_app_context():
        return Student.query.filter_by(education_id=education_id).first()

def get_recent_vision_records(limit=10):
    """获取最近的视力记录"""
    with get_app_context():
        return VisionRecord.query.order_by(VisionRecord.id.desc()).limit(limit).all()

def get_recent_intervention_records(limit=10):
    """获取最近的干预记录"""
    with get_app_context():
        return InterventionRecord.query.order_by(InterventionRecord.id.desc()).limit(limit).all()

# ===== 模块自检函数 =====
def validate_imports():
    """验证所有导入是否正常"""
    imports_status = {
        'Flask应用': app is not None,
        '数据库': db is not None,
        'User模型': User is not None,
        'Student模型': Student is not None,
        'VisionRecord模型': VisionRecord is not None,
        'InterventionRecord模型': InterventionRecord is not None,
        'ConfigManager': ConfigManager is not None,
    }
    
    print("="*50)
    print("🔍 导入验证结果")
    print("="*50)
    
    all_success = True
    for item, status in imports_status.items():
        status_text = "✅ 成功" if status else "❌ 失败"
        print(f"{item:20}: {status_text}")
        if not status:
            all_success = False
    
    print("="*50)
    if all_success:
        print("🎉 所有导入验证成功！")
    else:
        print("⚠️ 部分导入失败，请检查相关模块")
    
    return all_success

# ===== 初始化检查 =====
if __name__ == "__main__":
    print("🚀 DEV_VISION 标准导入模板")
    print("版本: v1.0")
    print("功能: 提供统一的开发和测试环境")
    print()
    
    # 验证导入
    if validate_imports():
        print()
        # 测试数据库连接
        if test_db_connection():
            print("✅ 数据库连接正常")
            print_db_stats()
        else:
            print("❌ 数据库连接失败")
    
    print()
    print("📋 使用说明:")
    print("1. 在其他脚本中使用: from standard_imports_template import *")
    print("2. 使用应用上下文: with get_app_context(): ...")
    print("3. 获取统计信息: print_db_stats()")
    print("4. 测试API端点: test_api_endpoint('/api/endpoint')")
